'''
通用装饰器

'''

def wraper(fun):  #装饰器函数

    def inner(*args,**kwargs):
        print('--这是最内层的装饰器，装饰前打印')
        ret = fun(*args,**kwargs)
        print('--这是最内层的装饰器，装饰后打印')
        return ret

    return inner
def zhuangshq(num): #如果装饰器本身需要参数可以在原来装饰器的基础上在外套一层函数，用来接收参数
    def wraper(fun):  #装饰器函数
        print('num')
        def inner(*args,**kwargs):
            print('--这是最外层的装饰器，装饰前打印')
            ret = fun(*args,**kwargs)
            print('--这是最外层的装饰器，装饰后打印')
            return ret

        return inner
    return wraper
@zhuangshq(12)
@wraper   #装饰器的用法   会把要装饰的函数当成参数传给装饰器函数，并且自动运行装饰器函数
def fun1():  #被装饰的函数
    print('我是被装饰的函数打印')

fun1() #调用的时候不再是原来的被装饰的函数了，而是装饰后返回的inner